home *** CD-ROM | disk | FTP | other *** search
/ Amiga Magazin: Amiga-CD 1996 September & October / Amiga-CD 1996 #9-10.iso / demos / storm-c / stormc / include / iomanip.h < prev    next >
C/C++ Source or Header  |  1996-06-13  |  3KB  |  156 lines

  1. #ifndef _INCLUDE_IOMANIP_H
  2. #define _INCLUDE_IOMANIP_H 
  3.  
  4. /*
  5. **  $VER: iomanip.h 1.0 (25.1.96)
  6. **  StormC Release 1.1
  7. **
  8. **  '(C) Copyright 1995 Haage & Partner Computer GmbH'
  9. **     All Rights Reserved
  10. */
  11.  
  12. #ifndef __cplusplus
  13. #error <iomanip.h> must be compiled in C++ mode.
  14. #pragma +
  15. #endif
  16.  
  17. #ifndef _INCLUDE_IOSTREAM_H
  18. #include <iostream.h>
  19. #endif
  20.  
  21.  
  22. template<class T> class SMANIP {
  23. public:
  24.     SMANIP(ios &(*ff)(ios &,T), T ii) : f(ff), i(ii) { };
  25.     friend istream &operator >>(istream &is, SMANIP<T> &m)
  26.     {
  27.         (*m.f)(is,m.i);
  28.         return is;
  29.     };
  30.     friend ostream &operator <<(ostream &os, SMANIP<T> &m)
  31.     {
  32.         (*m.f)(os,m.i);
  33.         return os;
  34.     };
  35. private:
  36.     T i;
  37.     ios& (*f)(ios &,T);
  38. };
  39.  
  40. template<class T> class IMANIP {
  41. public:
  42.     IMANIP(istream &(*ff)(istream &,T), T ii) : f(ff), i(ii) { };
  43.     friend istream &operator >>(istream &is, IMANIP<T> &m)
  44.     {
  45.         (*m.f)(is,m.i);
  46.         return is;
  47.     };
  48. private:
  49.     T i;
  50.     istream &(*f)(istream &,T);
  51. };
  52.  
  53. template<class T> class OMANIP {
  54. public:
  55.     OMANIP(ostream &(*ff)(ostream &,T), T ii) : f(ff), i(ii) { };                                   \
  56.     friend ostream &operator <<(ostream &os, OMANIP<T> &m)
  57.     {
  58.         (*m.f)(os,m.i);
  59.         return os;
  60.     }
  61. private:
  62.     T i;
  63.     ostream &(*f)(ostream &,T);
  64. };
  65.  
  66.  
  67. template<class T> class IOMANIP {
  68. public:
  69.     IOMANIP(iostream &(*ff)(iostream &,T), T ii) : f(ff), i(ii) { };                                   \
  70.     friend iostream &operator >>(iostream &io, IOMANIP<T> &m)
  71.     {
  72.         (*m.f)(io,m.i);
  73.         return io;
  74.     };
  75.     friend iostream &operator <<(iostream &io, IOMANIP<T> &m)
  76.     {
  77.         (*m.f)(io,m.i);
  78.         return io;
  79.     };
  80. private:
  81.     T i;
  82.     iostream &(*f)(iostream &,T);
  83. };
  84.  
  85. inline ios &setbase(ios &is, int i)
  86. {
  87.     if (i == 16)
  88.         return hex(is)
  89.     else if (i == 8)
  90.         return oct(is)
  91.     else
  92.         return dec(is);
  93. }
  94.  
  95. inline SMANIP<int> setbase(int i)
  96. {
  97.     return SMANIP<int>(setbase,i);
  98. }
  99.  
  100. inline ios &setw(ios &is, int i)
  101. {
  102.     is.width(i);
  103.     return is;
  104. }
  105.  
  106. inline SMANIP<int> setw(int i)
  107. {
  108.     return SMANIP<int>(setw,i);
  109. }
  110.  
  111. inline ios &setfill(ios &is, int i)
  112. {
  113.     is.fill(i);
  114.     return is;
  115. }
  116.  
  117. inline SMANIP<int> setfill(int i)
  118. {
  119.     return SMANIP<int>(setfill,i);
  120. }
  121.  
  122. inline ios &setprecision(ios &is, int i)
  123. {
  124.     is.precision(i);
  125.     return is;
  126. }
  127.  
  128. inline SMANIP<int> setprecision(int i)
  129. {
  130.     return SMANIP<int>(setprecision,i);
  131. }
  132.  
  133. inline ios &setiosflags(ios &is, long i)
  134. {
  135.     is.setf(i);
  136.     return is;
  137. }
  138.  
  139. inline SMANIP<long> setiosflags(long i)
  140. {
  141.     return SMANIP<long>(setiosflags,i);
  142. }
  143.  
  144. inline ios &resetiosflags(ios &is, long i)
  145. {
  146.     is.setf(0,i);
  147.     return is;
  148. }
  149.  
  150. inline SMANIP<long> resetiosflags(long i)
  151. {
  152.     return SMANIP<long>(resetiosflags,i);
  153. }
  154.  
  155. #endif
  156.